gitHub上传问题

问题

第一次将代码上传到gitHub时系统提示出错。

解决办法

设置Git.

1. 打开GitBash,如下图一所示:

  1. 敲入如下命令。

  2. gitconfig--globaluser.name"myname"

  3. git config --global user.email "[email protected]"

Test2LogCat

问题

LogCat 一直无法显示。

解决办法

添加按钮,通过按钮添加点击事件,如图二:

相关知识点

  1. Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命令来查看和使用.
  2. logcat 命令来查看系统日志缓冲区的内容: [adb] logcat [] ... [] ...请查看Listing of logcat Command Options ,它对logcat命令有详细的描述 .也可以在电脑或运行在模拟器/设备上的远程adb shell端来使用logcat命令,也可以在电脑上查看日志输出。
  3. logcat过滤日志输出每一个输出的Android日志信息都有一个标签和它的优先级. 日志的标签是系统部件原始信息的一个简要的标志。(比如:“View”就是查看系统的标签). 优先级有下列集中,是按照从低到高顺利排列的:
    • V — Verbose (lowest priority)
    • D — Debug
    • I — Info
    • W — Warning
    • E — Error
    • F — Fatal
    • S — Silent (highest priority, on which nothing is ever printed)

在运行logcat的时候在前两列的信息中可以看到logcat的标签列表和优先级别,它是这样标出的:/.

Test3常用组件

问题

  1. TestView中文字过长影响界面效果。
  2. 界面下方两个按钮长度不一,影响美观。

解决办法

  1. 修改TestView中句子的长度。
  2. 利用Button中layout-weight属性,将属性设置为1。效果图如图

相关知识点

Android中常用的五大布局方式有以下几种:
* 线性布局(LinearLayout):按照垂直或者水平方向布局的组件。
* 帧布局(FrameLayout):组件从屏幕左上方布局组件。
* 表格布局(TableLayout):按照行列方式布局组件。
* 相对布局(RelativeLayout):相对其他组件的布局方式。
* 绝对布局(AbsoluteLayout):按照绝对坐标来布局组件。

Test6菜单

问题

1.弹出菜单无法响应。

2.上下文菜单没有响应。

解决办法

  1. 查看代码,最后发现是布局中TestView没有添加onClick属性。添加后问题解决。2.上下文菜单没有注册,注册后问题解决。

相关知识点

菜单的创建方法

  1. 动态创建通过重写Activity中的onCreateOptionMenu方法来创建菜单,一般使用menu.add("选项名")为添加一个菜单选项,menu.getItem(int itemIndex)则是根据选项的索引获取该菜单选项,并对其进行操作,比如添加点击事件onMenuItemClickListener,用addSubMenu添加子菜单等。
  2. 通过XML资源文件创建可以通过menu文件夹下的menu.xml创建菜单的样式,然后利用getMenuInflater().inflate(menuRes.,menu)将创建的菜单样式inflate到程序中。大体主要分三步:
    1. 建立XML资源文件:menu.xml文件一般的定义方式如图片四:
    2. 在onCreateOptionMenu回调函数完成XML资源的infate,把菜单资源文件压入到程序中,不同彩带使用不同的回调函数,比如ContextMenu使用onCreateContextMenu,如图片五:
    3. 如果我们需要给菜单添加点击事件,一般我们通过重写onMenuItemSelected来设置,不同菜单使用不同的点击回调函数,比如ContextMenu使用onContextItemSelected,如图片六:

Test7对话框

问题

登录按钮无法登录。

解决办法

获取两个editText产生问题,修改由图片:

变为:

相关知识点

android自定义对话框使用方法

在android项目中为了美化外观,不会直接使用系统对话框,因此会自定义自己样式的自定义对话框,而自定义对话框也是非常简单的,具体使用方法如下。 

 1. 首先在XML中讲View视图显示出来,因为是自定义对话框,所以样式可以自己设定。
 2. 然后只需在创建的Activity种使用AlertDialog创建对话框并获取对话框内容显示出来。

Test8Activity的生命周期

问题

整体响应速度缓慢。

解决办法

多次启动。

相关知识点

Activity的生命周期如图片:

  1. 启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

  2. 当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

  3. 当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

  4. 当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

  5. 用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

  6. 当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

  7. 用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

Test12Fragmentmy20

问题

系统报错。

解决办法

根据Android Studio提示发现是Java包倒错,以及DetailFragment.java缺少OnFragmentInteractionListener接口。
改善后如图:

相关知识点

Fragment生命周期函数: 

* onAttach(Context) –
>
 当fragment被绑定到activity上时回调

* onCreate(Bundle) –
>
 当fragment对象创建的时候回调,一般在此方法里做参数接收。

* onCreateView(LayoutInflater, ViewGroup, Bundle) –
>
 创建fragment视图时回调

* onDestoryView –
>
 视图销毁时回调

* onDestory –
>
 销毁fragment时回调

* onDetech() –
>
 fragment与activity失去关联时回调

Fragment的使用

使用fragment可以当成一个控件,直接放到activity布局文件里;也可以在代码里面动态的添加、更新或者删除。

Test13横屏和竖屏

问题

  1. 在横竖屏之间切换,由于横竖屏的高宽会发生转换,会要求不同的布局。

解决办法

  1. 在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如main.xml。layout-land是横屏的main_large,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序为调用Activity的onCreate方法,从而加载相应的布局。如图所示:

相关知识点

如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。可以通过以下两种方法来切换布局:

1. 在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序为调用Activity的onCreate方法,从而加载相应的布局。

2. 假如布局资源不按照如上设置,则可以通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout xml。代码见图片二十:

Test14使用Intent隐式启动

问题

无法启动第二个Activity。

解决办法

上网查阅资料。错误原因是只单纯在AndroidManifest配置了activity的action属性,应该同时匹配action类别,category类别和data类别才可。并且category android:name="android.intent.category.DEFAULT"是必须的。如图片二十二:

相关知识点

  1. 隐式启动不需要致命需要启动哪一个Activity,而由Android系统来决定,这样有利于降低组件之间的耦合度。
  2. 隐式启动Activity时,Android系统会在程序运行时解析Intent,并根据一定的规则对Intent和Activity进行匹配,使Intent上的动作、数据与Activity完全吻合。匹配的组件可以是程序本身的Activity,也可以是Android系统内置的Activity,还可以是第三方应用程序提供的Activity。
  3. 程序开发人员可以将浏览动作和Web地址作为参数传递给Intent,Android系统则通过匹配动作和数据格式,找到最适合于此动作和数据格式的组件。

Test15使用Intent打电话

问题

没有对电话号码进行验证。

解决办法

通过Intent对象,带入"ACTION_CALL"这个关键词。代码如图:

相关知识点

通过自定义的Intent对象,带入"ACTION_CALL"这个关键,以及通过Uri.parse()的方法将用户输入号码(Data)带入,最后以startActivity()方法,将自定义的Intent传入。

Test16IntentFilter

相关知识点

Android操作系统使用过滤器来查明活动,服务和广播接收器能够处理制定的一组动作,类别。使用
<
intent-filter
>
元素在manifest文件中,列出了动作,类别和数据类型相关联的活动,服务或广播接收器。

Test19外部存储文件

问题

无法写入读取文件。

解决办法

没有在AndroidManifest.xml中配置SD卡访问权限。添加如图片二十四的代码:

相关知识点

 我们在使用SDcard进行读写的时候 会用到Environment类下面的几个静态方法 
1. getDataDirectory() 获取到Androi中的data数据目录
2.getDownloadCacheDirectory() 获取到下载的缓存目录
3. getExternalStorageDirectory() 获取到外部存储的目录 一般指SDcard
4. getExternalStorageState() 获取外部设置的当前状态 一般指SDcard,android系统中对于外部设置的状态,我们比较常用的应该是 MEDIA_MOUNTED(SDcard存在并且可以进行读写MEDIA_MOUNTED_READ_ONLY (SDcard存在,只可以进行读操作) 当然还有其他的一些状态,可以在文档中进行查找到。    5. getRootDirectory() 获取到Android Root路径
6. isExternalStorageEmulated() 返回Boolean值判断外部设置是否有效。
7.isExternalStorageRemovable() 返回Boolean值,判断外部设置是否可以移除。

Test21ContentProvider

问题

R突然变红报错无法运行。

解决办法

查看XML文件,发现有书写问题。

相关知识点

android中对数据操作包含有:

file, sqlite3, Preferences, ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。
android中提供ContectResolver与ContentProvider来操作别的应用程序的数据。
一个应用实现ContentProvider来提供内容给别的应用来操作,
一个应用通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以。

Test22访问联系人

问题

无法读写联系人。

解决办法

没有设置必须设置读或写的权限。代码如图:

相关知识点

  1. Android系统中的联系人也是通过ContentProvider来对外提供数据的
  2. 数据库路径为:/data/data/com.android.providers.contacts/database/contacts2.db
  3. 我们需要关注的有3张表: raw_contacts:其中保存了联系人id data:和raw_contacts是多对一的关系,保存了联系人的各项数据 mimetypes:为数据类型
  4. Provider的authorites为com.android.contacts
  5. 查询raw_contacts表的路径为:contacts
  6. 查询data表的路径为:contacts/#/data.这个路径为连接查询,要查询“mimetype”字段可以根据“mimetype_id”查询到mimetypes表中的数据
  7. 先查询raw_contacts得到每个联系人的id,在使用id从data表中查询对应数据,根据mimetype分类数据

Test23ContentObserver

问题

使用Logcat无法及时响应。

解决办法

 修改为Toast打印提示信息。如图,显示的是增加联系人:

相关知识点

1.在ContentProvider类的insert\update\delete方法加入this.getContext().getContentResolver().notifyChange(URI,null);
其中URI表示监听的URI
null表示发送消息给任何人;

2.在访问者的类中调用如下方法:

context.getContentResolver().registerContentObserver(uri,true,newContentObserver(newHandler()));

3.创建内部类继承ContentObserver并重写下面两个方法:
    (1)带有Handler的构造函数;
    (2)public void onChange(boolean selfChange); 此函数在内容提供者发出改变信号时就会被调用

。参数selfChange为如果是自己改变的原因,则为true;如果不是自己改变的,则为false;例如实例图

results matching ""

    No results matching ""